
# -*- coding: utf-8 -*-
# https://blog.csdn.net/maoyongfan3/article/details/46985863

import inspect

# 当程序出现诡异的bug时，我们需要层层去跟踪，尤其是要理清顺序。
# 这时如果有个清晰的调用脉络调试就容易多了。
# 利用inspect模块的getframeinfo方法来实现这需求。

def foo():
    frame = inspect.currentframe().f_back
    func = inspect.getframeinfo(frame)[2]

    who = inspect.getframeinfo(inspect.currentframe().f_back)[2]
    print('{} call me'.format(who))
    print('{} call me'.format(func))

def a():
    foo()

def b():
    foo()


a()
b()
a()
